import axios from 'axios'
// vant的toast提示框组件，大家可根据自己的ui组件更改。
import { showToast } from 'vant'; // 统一配置提示信息

import router from '../router'

import { getToken, clearToken } from '../utils/token'


//  直接创建实例 的方式
// http://121.89.205.189:3000/apidoc/#api-Banner-GetBannerList
// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
const instance = axios.create({
    baseURL: 'http://121.89.205.189:3000/api', // 配置基础地址
    timeout: 5000,                  // 配置响应超时

});




// 添加请求拦截器
instance.interceptors.request.use(function (config: any) {
    // 在发送请求之前做些什么
    // return config;
    //  所有的api请求都需要携带token  
    // token 获取的地方 ？？ 本地缓存 /pinia

    let token = getToken()
    if (token) {
        config.headers.token = token
    }

    return config


}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
instance.interceptors.response.use((response: any) => {

    // console.log('router', router.options)
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    //   请求成功
    console.log(response.data)

    if (response.data.code !== '200') showToast({
        message: response.data.message
    })



    return response.data;


}, (error: any) => {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么

    console.log(error)

    switch (error.response.status) {
        case 401:
            // 401: 未登录
            // 未登录则跳转登录页面，并携带当前页面的路径
            // 在登录成功后返回当前页面，这一步需要在登录页操作。 
            //  router.replace('/login?redirect='')


            showToast({
                message: '未登录',
                duration: 1000,
            })
            router.replace({
                name: 'login', query: {
                    redirect: router.options.history.state.current
                }
            })

            break;

        case 403:
            // 403 token过期

            // 登录过期对用户进行提示
            showToast({
                message: '登录过期',
                duration: 1000,
            })
            // 清除本地token和清空vuex/pinia中token对象
            // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面 
            clearToken()
            // removeToken() // 清除pinia中的数据
            setTimeout(() => {
                router.replace({
                    name: 'login', query: {
                        redirect: router.options.history.state.current
                    }
                })
            }, 1000)

        // 跳转登录页面 

        case 404:
            // 404请求不存在

            showToast({
                message: '清除错误 页面不存在',
                duration: 1000,
            })
            router.push({ name: 'NotFound' })


        // 其他错误，直接抛出错误提示
        default:

            showToast({
                message: '其他错误',
                duration: 1000,
            })




    }
    return Promise.reject(error);



});

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url: string, params?: Object) {
    return instance.get(url, { params })
}

/** 
 * post方法，对应post请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
 */
export function post(url: string, data: Object) {
    return instance.post(url, data)
}








